// .NAME vtkLTFVolumeRayCastMapper - A slow but accurate mapper for rendering volumes
// .SECTION Description
// This is a software ray caster for rendering volumes in vtkImageData. 

// .SECTION see also
// vtkVolumeMapper

#ifndef __vtkLTFVolumeRayCastMapper_h
#define __vtkLTFVolumeRayCastMapper_h

#include "vtkVolumeRayCastMapper.h"
#include "vtkVolumeRayCastFunction.h" // For vtkVolumeRayCastStaticInfo 
                                      // and vtkVolumeRayCastDynamicInfo
#include "vtkFastNumericConversion.h" // for fast rounding and floor

class vtkEncodedGradientEstimator;
class vtkEncodedGradientShader;
class vtkMatrix4x4;
class vtkMultiThreader;
class vtkPlaneCollection;
class vtkRenderer;
class vtkTimerLog;
class vtkVolume;
class vtkVolumeRayCastFunction;
class vtkVolumeTransform;
class vtkTransform;
class vtkRayCastImageDisplayHelper;

// Forward declaration needed for use by friend declaration below.
VTK_THREAD_RETURN_TYPE LTFVolumeRayCastMapper_CastRays( void *arg );

class VTK_EXPORT vtkLTFVolumeRayCastMapper : public vtkVolumeRayCastMapper
{
public:
  static vtkLTFVolumeRayCastMapper *New();
  vtkTypeRevisionMacro(vtkLTFVolumeRayCastMapper,vtkVolumeRayCastMapper);
 
//BTX
  // Description:
  // WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE
  // Initialize rendering for this volume.
  void Render( vtkRenderer *, vtkVolume * );
//ETX

protected:
  vtkLTFVolumeRayCastMapper();
  //~vtkLTFVolumeRayCastMapper();

  friend VTK_THREAD_RETURN_TYPE LTFVolumeRayCastMapper_CastRays( void *arg );

private:
  vtkLTFVolumeRayCastMapper(const vtkLTFVolumeRayCastMapper&);  // Not implemented.
  void operator=(const vtkLTFVolumeRayCastMapper&);  // Not implemented.
};

#endif

